/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pruebas;

import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;

/**
 *
 * @author epindado
 *
 */
public class ConvertirImagenBYN {
    
    public void convertirImagenBN(String rutaEntrada, String rutaSalida){
        long l = System.currentTimeMillis();
        try {
            //Obtenemos el archivo a convertir desde los argumentos del main
            File file = new File(rutaEntrada);
            //Leemos la imagen con el método read de la clase ImageIO //Y almacenamos la imagen en una clase BufferedImage
            BufferedImage image = ImageIO.read(file);

            //Obtenemos la porción de la correspondiente a los bytes de la imagen
            WritableRaster raster = image.getRaster();

            //Recorremos las columnas de la imagen
            for (int i = 0; i < image.getWidth(); i++) {
               //Recorremos las filas de la imagen
                for (int j = 0; j < image.getHeight(); j++) {
                    //Recorremos y obtenemos los pixeles en formato int //de la imagen
                    int color = image.getRGB(i, j);

                    //Aqui lo que hacemos es recorrer los bits 16, 8 posiciones de acuerdo al byte //del color que necesitemos modificar y luego se hace una operación and binaria
                    int r = (color >> 16) & 0xff;
                    int g = (color >> 8) & 0xff;
                    int b = (color) & 0xff;

                    //se multiplican los valores obtenidos por los valores preestablecidos //en la fórmula de luminosidad
                    int gray = (int) (.299 * r + .587 * g + .114 * b);

                    //se coloca la escala de gris obtenida en los las tres capas del mapa de bits. //en este caso estamos procesando un bmp de 24 bits.
                    raster.setSample(i, j, 0, gray);
                    raster.setSample(i, j, 1, gray);
                    raster.setSample(i, j, 2, gray);
                }
            }

            //Creamos un nuevo objeto de la clase BufferedImage con las dimensiones de la imagen original //y del tipo especificado
            BufferedImage out = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
            out.setData(raster);

             //Finalmente guardamos la imagen con el nombre especificado por el usuario
            ImageIO.write(out, "JPG", new File(rutaSalida));

        } catch (IOException ex) {
            Logger.getLogger(ConvertirImagenBYN.class.getName()).log(Level.SEVERE, null, ex);
        }

        long l1 = (System.currentTimeMillis() - l);
        System.out.println("Time to Process: " + l1 + "miliseconds");
    }
    
}
